﻿/***********************************
* Classe ModelePlateau             *
* Avertissement : classe Singleton *
***********************************/

package utils.appli {
	
	//import utils.appli.events.ModeleCalcuEvent;
	
	import flash.events.EventDispatcher;
	import utils.appli.Case;
	import utils.appli.Cheval;
	import utils.appli.events.ModelePlateauEvent;
	/*import utils.appli.Joueur;*/
	public class ModelePlateau extends EventDispatcher /*implements IModelePlateau*/ {
		
		/*********************
		*propriétés statiques*
		*********************/
		
		private static var instance:ModelePlateau/*IModelePlateau*/ = null; //référence l'occurrence unique
		
		/************************
		*propriétés d'occurrence*
		************************/
		
		public var _parcoursArray:Array;
		
		//private var _parcours:ModeleParcours;
		//private var _ecuries:ModeleEcuries;
		//private var _paddocks:ModelePaddocks;
		/*private var _joueurs:Joueur;*/
		
		/*************
		*constructeur*
		*************/
		
		//implémentation du DP Singleton
		public function ModelePlateau(p:ClassePrivee) {
			this._parcoursArray = new Array(56);
			//this._ecuries = new ModeleEcuries();
			//this._paddocks = new ModelePaddocks();
			//this._joueurs = new Array(4);
		}
		
		/****************************
		*méthodes d'instance publiques*
		****************************/
		
		public function init(){
			
		}
		
		public function resetAll():void {

		}
		
		//public function placeCheval(aJoueurActif:Joueur, aCheval:Cheval):void{
		public function placeCheval(aCheval:Cheval, aNumCase:int):void{
			/*//this._casesArray.indexOf(
			if (this._casesArray[_joueurActif._numEntreeParcours] == null ){
				this._casesArray[_joueurActif._numEntreeParcours] = aCheval;
			}*/
			if (this._parcoursArray[aNumCase] == null){
				this._parcoursArray[aNumCase] = aCheval;
			}
			// dispatch l'event avec le num de la case
			this.dispatchEvent(new ModelePlateauEvent(ModelePlateauEvent.CASE_OCCUPEE, false, false, aNumCase));
		}
		
		public function removeCheval(aCheval:Cheval):void{
			var numCase:int = this._parcoursArray.indexOf(aCheval);
			if (this._parcoursArray[numCase] != null){
				this._parcoursArray[numCase] = null;
			}
			this.dispatchEvent(new ModelePlateauEvent(ModelePlateauEvent.CASE_VIDEE, false, false, numCase));
		}
		
		/*******************
		*getters et setters*
		*******************/
		
		/*public function get joueur(index:int){
			return this._joueurs[index];
		}*/
		
		//assesseur statique : implémentation du DP Singleton
		public static function getInstance(): ModelePlateau/*IModelePlateau*/ {
			if(ModelePlateau.instance == null) {
				ModelePlateau.instance = new ModelePlateau(new ClassePrivee());
				}
			return ModelePlateau.instance ;
		}
		
		//accesseurs au modèle
		
		
		
	}
}//fin du package

class ClassePrivee {
  public function ClassePrivee() {
  }
}